package com.bamboowind.consumer.work;

import com.bamboowind.consumer.util.RabbitMqUtils;
import com.rabbitmq.client.*;

import java.io.IOException;

/**
 * 工作队列：消费者2
 *
 * @author cpw
 */
public class ConsumerWork2 {
    /**
     * 工作队列的队列名字
     */
    private final static String QUEUE_NAME = "rabbitmq-workQueue";

    public static void main(String[] args) throws IOException {

        //3.创建连接Connection
        Connection connection = RabbitMqUtils.getConnection();

        //4.创建Channel
        Channel channel = connection.createChannel();

        //5.创建队列(简单模式没有用到交换机，所以直接创建队列)
        /**
         * queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
         *参数:
         *    1.queue:队列名称
         *    2.durable:是否持久化，当mq重启以后是否还在
         *    3.exclusive:是否独占，只能有一个消费者监听这个队列；当Connection关闭后是否删除队列
         *    4.autoDelete:是否自动删除，当没有Consumer的时候是否自动删除
         *    5.argument:参数
         * */
        channel.queueDeclare(QUEUE_NAME, true, false, false, null);

        //6.接收消息
        /**
         * basicConsume(String queue, boolean autoAck, Consumer callback)
         * 参数:
         *      1.queue:队列名称
         *      2.autoAck:是否自动确认
         *      3.callback:回调对象
         * */
        Consumer consumer = new DefaultConsumer(channel) {
            /**
             * 回调方法，当收到消息后会自动执行该方法
             * 1.consumerTag:标识
             * 2.envelope:获取一些信息，交换机，路由等
             * 3.properties:配置信息
             * 4.body:数据
             * */
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {

                System.out.println("body:" + new String(body));
            }
        };
        channel.basicConsume(QUEUE_NAME, true, consumer);
    }
}
